home *** CD-ROM | disk | FTP | other *** search
/ Chip 2001 June / CHIP Haziran 2001.iso / prog / haziran / 19 / setup.exe / data.z / windrvr.cls < prev    next >
Text File  |  2001-04-11  |  35KB  |  901 lines

  1. Attribute VB_Name = "windrvr"
  2.  
  3. '  W i n D r i v e r    v 5 . 0 0
  4. '
  5. '  Header file for Windows 95/98/ME/NT/NTE/NT2000.
  6. '  This file may not be distributed, it is only for evaluation & development purposes.
  7. '
  8. '  Web site as http://www.jungo.com/windrv
  9. '  Email as      support@jungo.com
  10. '
  11. '  (C) Jungo 2001
  12.  
  13. Option Explicit
  14.  
  15. Global Const WD_VER = 500
  16.  
  17. Global Const WD_VER_STR = "WinDriver V5.00 Jungo (c) 2001"
  18. Global Const WD_VER_MODULE = WD_VER_STR
  19.  
  20. Global Const CMD_NONE = 0         ' No command
  21. Global Const CMD_END = 1          ' End command
  22.  
  23. Global Const RP_BYTE = 10         ' Read port byte
  24. Global Const RP_WORD = 11         ' Read port word
  25. Global Const RP_DWORD = 12        ' Read port dword
  26. Global Const WP_BYTE = 13         ' Write port byte
  27. Global Const WP_WORD = 14         ' Write port word
  28. Global Const WP_DWORD = 15        ' Write port dword
  29.  
  30. Global Const RP_SBYTE = 20        ' Read port string byte
  31. Global Const RP_SWORD = 21        ' Read port string word
  32. Global Const RP_SDWORD = 22       ' Read port string dword
  33. Global Const WP_SBYTE = 23        ' Write port string byte
  34. Global Const WP_SWORD = 24        ' Write port string word
  35. Global Const WP_SDWORD = 25       ' Write port string dword
  36.  
  37. Global Const RM_BYTE = 30         ' Read memory byte
  38. Global Const RM_WORD = 31         ' Read memory word
  39. Global Const RM_DWORD = 32        ' Read memory dword
  40. Global Const WM_BYTE = 33         ' Write memory byte
  41. Global Const WM_WORD = 34         ' Write memory word
  42. Global Const WM_DWORD = 35        ' Write memory dword
  43.  
  44. Global Const RM_SBYTE = 40        ' Read memory string byte
  45. Global Const RM_SWORD = 41        ' Read memory string word
  46. Global Const RM_SDWORD = 42       ' Read memory string dword
  47. Global Const WM_SBYTE = 43        ' Write memory string byte
  48. Global Const WM_SWORD = 44        ' Write memory string word
  49. Global Const WM_SDWORD = 45       ' Write memory string dword
  50.  
  51. Global Const WM_APP As Long = &H8000&    ' Platform SDK constant
  52.  
  53. Global Const WD_DMA_PAGES = 256
  54.  
  55. Global Const DMA_KERNEL_BUFFER_ALLOC = 1 ' the system allocates a contiguous buffer
  56.                                          ' the user doesnt need to supply linear_address
  57. Global Const DMA_KBUF_BELOW_16M = 2      ' if DMA_KERNEL_BUFFER_ALLOC if used,
  58.                                          ' this will make sure it is under 16M
  59. Global Const DMA_LARGE_BUFFER = 4        ' if DMA_LARGE_BUFFER if used,
  60.                                  ' the maximum number of pages are dwPages, and not
  61.                                  ' WD_DMA_PAGES. if you lock a user buffer (not a kernel
  62.                                  ' allocated buffer) that is larger than 1MB, then use this
  63.                                  ' option, and allocate memory for pages.
  64.  
  65.  
  66. Type PVOID
  67.     ptr As Long
  68. End Type
  69.    
  70.  
  71.  
  72. Type WD_DMA_PAGE
  73.     pPhysicalAddr As PVOID        ' physical address of page
  74.     dwBytes       As Long        ' size of page
  75. End Type
  76.  
  77.  
  78. Type WD_DMA
  79.     hDMA       As Long      ' handle of DMA buffer
  80.     pUserAddr  As PVOID      ' beginning of buffer
  81.     dwBytes    As Long      ' size of buffer
  82.     dwOptions  As Long      ' allocation options
  83.     dwPages    As Long      ' number of pages in buffer
  84.     Page(0 To WD_DMA_PAGES - 1) As WD_DMA_PAGE
  85. End Type
  86.  
  87. Type WD_TRANSFER
  88.     cmdTrans    As Long  ' Transfer command WD_TRANSFER_CMD
  89.     dwPort      As Long  ' IO port for transfer or user memory address
  90.     dwBytes     As Long  ' For string transfer
  91.     fAutoInc    As Long  ' Transfer from one port/address or
  92.                          ' use incremental range of addresses
  93.     dwOptions   As Long  ' Must be 0
  94.     dwDataTransfer As Long
  95. End Type
  96.  
  97. Type PWD_TRANSFER    ' pointer to WD_TRANSFER
  98.     cmd As Long
  99. End Type
  100.  
  101. Private IOCTL_WD_DMA_LOCK As Long
  102. Private IOCTL_WD_DMA_UNLOCK As Long
  103. Private IOCTL_WD_TRANSFER As Long
  104. Private IOCTL_WD_MULTI_TRANSFER As Long
  105. Private IOCTL_WD_PCI_SCAN_CARDS As Long
  106. Private IOCTL_WD_PCI_GET_CARD_INFO As Long
  107. Private IOCTL_WD_VERSION As Long
  108. Private IOCTL_WD_LICENSE As Long
  109. Private IOCTL_WD_PCI_CONFIG_DUMP As Long
  110. Private IOCTL_WD_KERNEL_PLUGIN_OPEN As Long
  111. Private IOCTL_WD_KERNEL_PLUGIN_CLOSE As Long
  112. Private IOCTL_WD_KERNEL_PLUGIN_CALL As Long
  113. Private IOCTL_WD_INT_ENABLE As Long
  114. Private IOCTL_WD_INT_DISABLE As Long
  115. Private IOCTL_WD_INT_COUNT As Long
  116. Private IOCTL_WD_INT_WAIT As Long
  117. Private IOCTL_WD_ISAPNP_SCAN_CARDS As Long
  118. Private IOCTL_WD_ISAPNP_GET_CARD_INFO As Long
  119. Private IOCTL_WD_ISAPNP_CONFIG_DUMP As Long
  120. Private IOCTL_WD_PCMCIA_SCAN_CARDS As Long
  121. Private IOCTL_WD_PCMCIA_GET_CARD_INFO As Long
  122. Private IOCTL_WD_PCMCIA_CONFIG_DUMP As Long
  123. Private IOCTL_WD_SLEEP As Long
  124. Private IOCTL_WD_DEBUG As Long
  125. Private IOCTL_WD_DEBUG_DUMP As Long
  126. Private IOCTL_WD_CARD_UNREGISTER As Long
  127. Private IOCTL_WD_CARD_REGISTER As Long
  128.  
  129.  
  130. Global Const INTERRUPT_LEVEL_SENSITIVE = 1
  131. Global Const INTERRUPT_CMD_COPY = 2
  132.  
  133. Type WD_KERNEL_PLUGIN_CALL
  134.     hKernelPlugIn As Long
  135.     dwMessage     As Long
  136.     pData         As PVOID
  137.     dwResult      As Long
  138. End Type
  139.  
  140. Type WD_INTERRUPT
  141.     hInterrupt As Long ' handle of interrupt
  142.     dwOptions  As Long ' interrupt options as INTERRUPT_CMD_COPY
  143.     cmd        As PWD_TRANSFER ' commands to do on interrupt
  144.     dwCmds     As Long         ' number of commands for WD_IntEnable()
  145.     kpCall    As WD_KERNEL_PLUGIN_CALL ' kernel plugin call
  146.     fEnableOk As Long     ' did WD_IntEnable() succeed
  147.                           ' For WD_IntWait() and WD_IntCount()
  148.     dwCounter As Long ' number of interrupts received
  149.     dwLost    As Long ' number of interrupts not yet dealt with
  150.     fStopped  As Long ' was interrupt disabled during wait
  151. End Type
  152.  
  153. Type WD_VERSION
  154.     dwVer As Long
  155.     cVer(0 To 100 - 1) As Byte ' needs testing if pascal string is compatible
  156. End Type
  157.  
  158. Global Const LICENSE_DEMO As Long = &H1
  159. Global Const LICENSE_WD   As Long = &H4
  160. Global Const LICENSE_KD   As Long = &H400000
  161. Global Const LICENSE_IO   As Long = &H8
  162. Global Const LICENSE_MEM  As Long = &H10
  163. Global Const LICENSE_INT  As Long = &H20
  164. Global Const LICENSE_PCI  As Long = &H40
  165. Global Const LICENSE_DMA  As Long = &H80
  166. Global Const LICENSE_NT   As Long = &H100
  167. Global Const LICENSE_95   As Long = &H200
  168. Global Const LICENSE_ISAPNP   As Long = &H400
  169. Global Const LICENSE_PCMCIA   As Long = &H800
  170. Global Const LICENSE_PCI_DUMP As Long = &H1000
  171. Global Const LICENSE_MSG_GEN  As Long = &H2000
  172. Global Const LICENSE_MSG_EDU  As Long = &H4000
  173. Global Const LICENSE_MSG_INT  As Long = &H8000&
  174. Global Const LICENSE_KER_PLUG As Long = &H10000
  175. Global Const LICENSE_LINUX As Long = &H20000
  176. Global Const LICENSE_CE    As Long = &H80000
  177. Global Const LICENSE_VXWORKS As Long = &H10000000
  178. Global Const LICENSE_THIS_PC As Long = &H100000
  179. Global Const LICENSE_WIZARD  As Long = &H200000
  180. Global Const LICENSE_SOLARIS As Long = &H800000
  181. Global Const LICENSE_CPU0 As Long = &H40000
  182. Global Const LICENSE_CPU1 As Long = &H1000000
  183. Global Const LICENSE_CPU2 As Long = &H2000000
  184. Global Const LICENSE_CPU3 As Long = &H4000000
  185. Global Const LICENSE_USB  As Long = &H8000000
  186.  
  187. Global Const LICENSE2_CPCI As Long = &H1
  188. Global Const LICENSE2_REMOTE As Long = &H2
  189.  
  190. Type WD_LICENSE
  191.     cLicense(0 To 100 - 1) As Byte ' buffer with license string to
  192.                             ' put. If empty string then get
  193.                             ' current license setting into
  194.                             ' dwLicense
  195.     dwLicense  As Long  ' Returns license settings:
  196.     dwLicense2 As Long  ' LICENSE_DEMO, LICENSE_WD etc...
  197.                             ' If put license was unsuccessful
  198.                             ' (i.e. invalid license) then dwLicense
  199.                             ' will return 0.
  200. End Type
  201.  
  202. Type WD_BUS
  203.     dwBusType  As Long      ' Bus Type: ISA, EISA, PCI, PCMCIA
  204.     dwBusNum   As Long      ' Bus number
  205.     dwSlotFunc As Long      ' Slot number on Bus
  206. End Type
  207.  
  208. Global Const WD_BUS_ISA = 1
  209. Global Const WD_BUS_EISA = 2
  210. Global Const WD_BUS_PCI = 5
  211. Global Const WD_BUS_PCMCIA = 8
  212.  
  213. Global Const ITEM_NONE = 0
  214. Global Const ITEM_INTERRUPT = 1
  215. Global Const ITEM_MEMORY = 2
  216. Global Const ITEM_IO = 3
  217. Global Const ITEM_BUS = 5
  218.  
  219. Type WD_ITEMS
  220.     Item         As Long ' ITEM_TYPE
  221.     fNotSharable As Long
  222.     ' for ITEM_INTERRUPT
  223.     ' dw1 - number of interrupt to install
  224.     ' dw2 - interrupt options: INTERRUPT_LEVEL_SENSITIVE
  225.     ' dw3 - returns the handle of the interrupt installed
  226.     ' for ITEM_MEMORY
  227.     ' dw1 - physical address on card
  228.     ' dw2 - address range
  229.     ' dw3 - returns the address to pass on to transfer commands
  230.     ' dw4 - returns the address for direct user read/write
  231.     ' dw5 - returns the CPU physical address of card
  232.     ' for ITEM_IO
  233.     ' dw1 - beginning of io address
  234.     ' dw2 - io range
  235.     dw1 As Long
  236.     dw2 As Long
  237.     dw3 As Long
  238.     dw4 As Long
  239.     dw5 As Long
  240. End Type
  241.  
  242. Global Const WD_CARD_ITEMS = 20
  243.  
  244. Type WD_CARD
  245.     dwItems As Long
  246.     Item(0 To WD_CARD_ITEMS - 1) As WD_ITEMS
  247. End Type
  248.  
  249. Type WD_CARD_REGISTER
  250.     Card           As WD_CARD ' card to register
  251.     fCheckLockOnly As Long    ' only check if card is lockable, return hCard=1 if OK
  252.     hCard          As Long    ' handle of card
  253.     dwOptions      As Long    ' should be zero
  254.     cName(0 To 31)      As Byte        ' name of card
  255.     cDescription(0 To 100 - 1) As Byte ' description
  256. End Type
  257.  
  258. Global Const WD_PCI_CARDS = 30
  259.  
  260. Type WD_PCI_SLOT
  261.     dwBus  As Long
  262.     dwSlot As Long
  263.     dwFunction As Long
  264. End Type
  265.  
  266. Type WD_PCI_ID
  267.     dwVendorId As Long
  268.     dwDeviceId As Long
  269. End Type
  270.  
  271. Type WD_PCI_SCAN_CARDS
  272.     searchId As WD_PCI_ID ' if dwVendorId = 0, scan all
  273.                           ' vendor Ids
  274.                           ' if dwDeviceId = 0, scan all
  275.                           ' device Ids
  276.     dwCards  As Long   ' Number of cards found
  277.     cardId(0 To WD_PCI_CARDS - 1) As WD_PCI_ID
  278.                      ' VendorID & DeviceID of cards found
  279.     cardSlot(0 To WD_PCI_CARDS - 1) As WD_PCI_SLOT
  280.                      ' PCI slot info of cards found
  281. End Type
  282.  
  283. Type WD_PCI_CARD_INFO
  284.     pciSlot As WD_PCI_SLOT ' PCI slot
  285.     Card    As WD_CARD     ' Get card parameters for PCI slot
  286. End Type
  287.  
  288. Global Const PCI_ACCESS_OK = 0
  289. Global Const PCI_ACCESS_ERROR = 1
  290. Global Const PCI_BAD_BUS = 2
  291. Global Const PCI_BAD_SLOT = 3
  292.  
  293. Type WD_PCI_CONFIG_DUMP
  294.     pciSlot  As WD_PCI_SLOT ' PCI bus, slot and function number
  295.     pBuffer  As PVOID       ' buffer for read/write
  296.     dwOffset As Long        ' offset in pci configuration space
  297.                             ' to read/write from
  298.     dwBytes  As Long       ' bytes to read/write from/to buffer
  299.                                 ' returns the # of bytes read/written
  300.     fIsRead  As Long       ' if 1 then read pci config, 0 write pci config
  301.     dwResult As Long       ' PCI_ACCESS_RESULT
  302. End Type
  303.  
  304. Global Const WD_ISAPNP_CARDS = 16
  305. Global Const WD_ISAPNP_COMPATIBLE_IDS = 10
  306. Global Const WD_ISAPNP_COMP_ID_LENGTH = 7  ' ISA compressed ID is 7 chars long
  307. Global Const WD_ISAPNP_ANSI_LENGTH = 32    ' ISA ANSI ID is limited to 32 chars long
  308.  
  309.  
  310. Type WD_ISAPNP_COMP_ID
  311.     compID(0 To WD_ISAPNP_COMP_ID_LENGTH) As Byte
  312. End Type
  313. Type WD_ISAPNP_ANSI
  314.     ansi(0 To WD_ISAPNP_ANSI_LENGTH + 3) As Byte ' add 3 bytes for DWORD alignment
  315. End Type
  316.  
  317.  
  318.  
  319. Type WD_ISAPNP_CARD_ID
  320.     cVendor  As WD_ISAPNP_COMP_ID ' Vendor ID
  321.     dwSerial As Long ' Serial number of card
  322. End Type
  323.  
  324.  
  325. Type WD_ISAPNP_CARD
  326.     cardId As WD_ISAPNP_CARD_ID ' VendorID & serial number of cards found
  327.     dcLogicalDevices As Long   ' Logical devices on the card
  328.     bPnPVersionMajor As Byte    ' ISA PnP version Major
  329.     bPnPVersionMinor As Byte    ' ISA PnP version Minor
  330.     bVendorVersionMajor As Byte ' Vendor version Major
  331.     bVendorVersionMinor As Byte ' Vendor version Minor
  332.     cIdent As WD_ISAPNP_ANSI    ' Device identifier
  333. End Type
  334.  
  335. Type WD_ISAPNP_SCAN_CARDS
  336.     searchId As WD_ISAPNP_CARD_ID ' if searchId.cVendor[0]==0 - scan all vendor IDs
  337.                                       ' if searchId.dwSerial==0 - scan all serial numbers
  338.     dwCards As Long  ' number of cards found
  339.     Card(0 To WD_ISAPNP_CARDS - 1) As WD_ISAPNP_CARD ' cards found
  340. End Type
  341.  
  342.  
  343. Type WD_ISAPNP_CARD_INFO
  344.     cardId   As WD_ISAPNP_CARD_ID  ' VendorID and serial number of card
  345.     dwLogicalDevice     As Long   ' logical device in card
  346.     cLogicalDeviceId    As WD_ISAPNP_COMP_ID  ' logical device ID
  347.     dwCompatibleDevices As Long   ' number of compatible device IDs
  348.     CompatibleDevice(0 To WD_ISAPNP_COMPATIBLE_IDS - 1) As WD_ISAPNP_COMP_ID ' Compatible device IDs
  349.     cIdent As WD_ISAPNP_ANSI  ' Device identifier
  350.     Card As WD_CARD  ' get card parameters for the ISA PnP card
  351. End Type
  352.  
  353. Global Const ISAPNP_ACCESS_OK = 0
  354. Global Const ISAPNP_ACCESS_ERROR = 1
  355. Global Const ISAPNP_BAD_ID = 2
  356.  
  357. Type WD_ISAPNP_CONFIG_DUMP
  358.     cardId   As WD_ISAPNP_CARD_ID  ' VendorID and serial number of card
  359.     dwOffset As Long   ' offset in ISA PnP configuration space to read/write from
  360.     fIsRead  As Long   ' if 1 then read ISA PnP config, 0 write ISA PnP config
  361.     bData    As Byte    ' result data of byte read/write
  362.     dwResult As Long ' ISAPNP_ACCESS_RESULT
  363. End Type
  364.  
  365. Global Const WD_PCMCIA_CARDS = 8
  366. Global Const WD_PCMCIA_VERSION_LEN = 4
  367. Global Const WD_PCMCIA_MANUFACTURER_LEN = 48
  368. Global Const WD_PCMCIA_PRODUCTNAME_LEN = 48
  369. Global Const WD_PCMCIA_MAX_SOCKET = 2
  370. Global Const WD_PCMCIA_MAX_FUNCTION = 2
  371.  
  372.  
  373. Type WD_PCMCIA_SLOT
  374.     uSocket    As Byte  ' Specifies the socket number (first socket is 0)
  375.     uFunction  As Byte  ' Specifies the function number (first function is 0)
  376.     uPadding0  As Byte  ' 2 bytes padding so structure will be 4 bytes aligned
  377.     uPadding1  As Byte
  378. End Type
  379.  
  380. Type WD_PCMCIA_ID
  381.     dwManufacturerId As Long ' card manufacturer
  382.     dwCardId         As Long ' card type and model
  383. End Type
  384.  
  385. Type WD_PCMCIA_SCAN_CARDS
  386.     searchId As WD_PCMCIA_ID                              ' device ID to search for
  387.     dwCards As Long                                       ' number of cards found
  388.     cardId(0 To WD_PCMCIA_CARDS - 1) As WD_PCMCIA_ID      ' device IDs of cards found
  389.     cardSlot(0 To WD_PCMCIA_CARDS - 1) As WD_PCMCIA_SLOT  ' pcmcia slot info of cards found
  390. End Type
  391.  
  392. Type WD_PCMCIA_CARD_INFO
  393.     pcmciaSlot As WD_PCMCIA_SLOT  ' pcmcia slot
  394.     Card As WD_CARD               ' get card parameters for pcmcia slot
  395.     cVersion(0 To WD_PCMCIA_VERSION_LEN - 1) As Byte
  396.     cManufacturer(0 To WD_PCMCIA_MANUFACTURER_LEN - 1) As Byte
  397.     cProductName(0 To WD_PCMCIA_PRODUCTNAME_LEN - 1) As Byte
  398.     dwManufacturerId As Long      ' card manufacturer
  399.     dwCardId As Long              ' card type and model
  400.     dwFuncId As Long              ' card function code
  401. End Type
  402.  
  403. Type WD_PCMCIA_CONFIG_DUMP
  404.     pcmciaSlot As WD_PCMCIA_SLOT
  405.     pBuffer    As PVOID     ' buffer for read/write
  406.     dwOffset   As Long      ' offset in pcmcia configuration space to
  407.                             ' read/write from
  408.     dwBytes    As Long      ' bytes to read/write from/to buffer
  409.                             ' returns the number of bytes read/wrote
  410.     fIsRead    As Long      ' if 1 then read pci config, 0 write pci config
  411.     dwResult   As Long      ' PCMCIA_ACCESS_RESULT
  412. End Type
  413.  
  414. Global Const SLEEP_NON_BUSY = 1
  415.  
  416. Type WD_SLEEP
  417.     dwMicroSeconds As Long ' Sleep time in Micro Seconds (1/1,000,000 Second)
  418.     dwOptions      As Long ' can be:
  419.                            ' SLEEP_NON_BUSY this is accurate only for times above 10000 uSec
  420. End Type
  421.  
  422. Global Const D_OFF = 0
  423. Global Const D_ERROR = 1
  424. Global Const D_WARN = 2
  425. Global Const D_INFO = 3
  426. Global Const D_TRACE = 4
  427.  
  428. Global Const S_ALL As Long = &HFFFFFFFF
  429. Global Const S_IO As Long = &H8
  430. Global Const S_MEM As Long = &H10
  431. Global Const S_INT As Long = &H20
  432. Global Const S_PCI As Long = &H40
  433. Global Const S_DMA As Long = &H80
  434. Global Const S_MISC As Long = &H100
  435. Global Const S_LICENSE As Long = &H200
  436. Global Const S_ISAPNP As Long = &H400
  437. Global Const S_PCMCIA As Long = &H800
  438. Global Const S_KER_PLUG As Long = &H10000
  439. Global Const S_CARD_REG As Long = &H2000
  440.  
  441. Global Const DEBUG_STATUS = 1
  442. Global Const DEBUG_SET_FILTER = 2
  443. Global Const DEBUG_SET_BUFFER = 3
  444. Global Const DEBUG_CLEAR_BUFFER = 4
  445. Global Const DEBUG_DUMP_SEC_ON = 5
  446. Global Const DEBUG_DUMP_SEC_OFF = 6
  447.  
  448. 'from win32API
  449. Declare Function CreateFile Lib "kernel32" Alias "CreateFileA" (ByVal lpFileName As String, ByVal dwDesiredAccess As Long, ByVal dwShareMode As Long, ByVal lpSecurityAttributes As Long, ByVal dwCreationDisposition As Long, ByVal dwFlagsAndAttributes As Long, ByVal hTemplateFile As Long) As Long
  450. Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
  451. Declare Function DeviceIoControl Lib "kernel32" ( _
  452.     ByVal hDevice As Long, _
  453.     ByVal dwIoControlCode As Long, _
  454.           lpInBuffer As Any, _
  455.     ByVal nInBufferSize As Long, _
  456.     ByVal lpOutBuffer As Long, _
  457.     ByVal nOutBufferSize As Long, _
  458.           lpBytesReturned As Long, _
  459.     ByVal lpOverlapped As Long) As Long
  460. Private Const GENERIC_READ = &H80000000
  461. Private Const FILE_SHARE_READ = &H1
  462. Private Const FILE_SHARE_WRITE = &H2
  463. Private Const OPEN_EXISTING = 3
  464. Private Const FILE_FLAG_OVERLAPPED = &H40000000
  465. Global Const INVALID_HANDLE_VALUE = -1
  466.  
  467. 'call this function with the variable of which you need the pointer and the last two params pass 1
  468. 'address = WD_VB_GetAddress (Variable, 1, 1) 'this extracts the address of Variable
  469. Declare Function WD_VB_GetAddress Lib "kernel32" Alias "MulDiv" (ByRef dwNum As Any, ByVal one As Long, ByVal one_ As Long) As Long
  470.  
  471. 'Use external DLL for interrupt handling
  472. Declare Function InterruptThreadEnable Lib "WD_VB.DLL" _
  473.     Alias "WD_VB_InterruptThreadEnable" ( _
  474.     ByRef phThread As Long, _
  475.     ByVal hWD As Long, _
  476.     ByRef pInt As Any, _
  477.     ByVal IntHandler As Long, _
  478.     ByVal pData As Long, _
  479.     ByVal hWnd As Long) As Long
  480. Declare Sub InterruptThreadDisable Lib "WD_VB.DLL" _
  481.     Alias "WD_VB_InterruptThreadDisable" (ByVal hThread As Long)
  482.   
  483. Type WD_DEBUG
  484.     dwCmd As Long          ' DEBUG_COMMAND as DEBUG_STATUS, DEBUG_SET_FILTER, DEBUG_SET_BUFFER, DEBUG_CLEAR_BUFFER
  485.                            ' used for DEBUG_SET_FILTER
  486.     dwLevel As Long        ' DEBUG_LEVEL as D_ERROR, D_WARN..., or D_OFF to turn debugging off
  487.     dwSection As Long      ' DEBUG_SECTION as for all sections in driver as S_ALL
  488.                            ' for partial sections as S_IO, S_MEM...
  489.     dwLevelMessageBox As Long  ' DEBUG_LEVEL to print in a message box
  490.                                ' used for DEBUG_SET_BUFFER
  491.     dwBufferSize As Long   ' size of buffer in kernel
  492. End Type
  493.  
  494. Type PChar
  495.     charPtr As Long
  496. End Type
  497.  
  498. Type WD_DEBUG_DUMP
  499.     pcBuffer As PChar ' buffer to receive debug messages
  500.     dwSize As Long    ' size of buffer in bytes
  501. End Type
  502.  
  503. Type WD_KERNEL_PLUGIN
  504.     hKernelPlugIn As Long
  505.     pcDriverName As PChar
  506.     pcDriverPath As PChar ' if NULL the driver will be searched in the windows system directory
  507.     pOpenData As PVOID
  508. End Type
  509.  
  510. Global Const PIPE_TYPE_CONTROL = 0
  511. Global Const PIPE_TYPE_ISOCHRONOUS = 1
  512. Global Const PIPE_TYPE_BULK = 2
  513. Global Const PIPE_TYPE_INTERRUPT = 3
  514.  
  515.  
  516. Global Const WD_USB_MAX_PIPE_NUMBER        = 32
  517. Global Const WD_USB_MAX_ENDPOINTS          = 32
  518. Global Const WD_USB_MAX_INTERFACES         = 30
  519. Global Const WD_USB_MAX_DEVICE_NUMBER      = 127
  520.  
  521. Global Const USB_DIR_IN = 1
  522. Global Const USB_DIR_OUT = 2
  523. Global Const USB_DIR_IN_OUT = 3
  524.  
  525. Type WD_USB_ID
  526.     dwVendorId  As Long
  527.     dwProductId As Long
  528. End Type
  529.  
  530. Type WD_USB_PIPE_INFO
  531.     dwNumber As Long        ' Pipe 0 is the default pipe
  532.     dwMaximumPacketSize As Long
  533.     type As Long            ' USB_PIPE_TYPE
  534.     direction As Long       ' USB_DIR
  535.                             ' Isochronous, Bulk, Interrupt are either USB_DIR_IN or USB_DIR_OUT
  536.                             ' Control are USB_DIR_IN_OUT
  537.     dwInterval As Long      ' interval in ms relevant to Interrupt pipes
  538. End Type
  539.  
  540. Type WD_USB_CONFIG_DESC
  541.     dwNumInterfaces As Long
  542.     dwValue         As Long
  543.     dwAttributes    As Long
  544.     MaxPower        As Long
  545. End Type
  546.  
  547. Type WD_USB_INTERFACE_DESC
  548.     dwNumber           As Long
  549.     dwAlternateSetting As Long
  550.     dwNumEndpoints     As Long
  551.     dwClass            As Long
  552.     dwSubClass         As Long
  553.     dwProtocol         As Long
  554.     dwIndex            As Long
  555. End Type
  556.  
  557. Type WD_USB_ENDPOINT_DESC
  558.     dwEndpointAddress As Long
  559.     dwAttributes      As Long
  560.     dwMaxPacketSize   As Long
  561.     dwInterval        As Long
  562. End Type
  563.  
  564. Type WD_USB_INTERFACE
  565.     Interface As WD_USB_INTERFACE_DESC
  566.     Endpoints(0 To WD_USB_MAX_ENDPOINTS - 1) As WD_USB_ENDPOINT_DESC
  567. End Type
  568.  
  569. Type WD_USB_CONFIGURATION
  570.     uniqueId As Long
  571.     dwConfigurationIndex As Long
  572.     configuration As WD_USB_CONFIG_DESC
  573.     dwInterfaceAlternatives As Long
  574.     Interface(0 To WD_USB_MAX_INTERFACES - 1) As WD_USB_INTERFACE
  575. End Type
  576.  
  577. Type WD_USB_HUB_GENERAL_INFO
  578.     fBusPowered          As Long
  579.     dwPorts              As Long  ' number of ports on this hub
  580.     dwCharacteristics    As Long  ' Hub Charateristics
  581.     dwPowerOnToPowerGood As Long  ' port power on till power good in 2ms
  582.     dwHubControlCurrent  As Long  ' max current in mA
  583. End Type
  584.  
  585. Type WD_USB_DEVICE_GENERAL_INFO
  586.     deviceId            As WD_USB_ID
  587.     dwHubNum            As Long
  588.     dwPortNum           As Long
  589.     fHub                As Long
  590.     fFullSpeed          As Long
  591.     dwConfigurationsNum As Long
  592.     deviceAddress       As Long
  593.     hubInfo             As WD_USB_HUB_GENERAL_INFO
  594. End Type
  595.  
  596. Type WD_USB_DEVICE_INFO
  597.     dwPipes As Long
  598.     Pipe(0 To WD_USB_MAX_PIPE_NUMBER - 1) As WD_USB_PIPE_INFO
  599. End Type
  600.  
  601. Type WD_USB_SCAN_DEVICES
  602.     searchId  As WD_USB_ID ' if dwVendorId==0 - scan all vendor IDs
  603.                            ' if dwProductId==0 - scan all product IDs
  604.     dwDevices As Long
  605.     uniqueId(0 To WD_USB_MAX_DEVICE_NUMBER - 1) As Long         ' a unique id to identify the device
  606.     deviceGeneralInfo(0 To WD_USB_MAX_DEVICE_NUMBER - 1) As WD_USB_DEVICE_GENERAL_INFO
  607. End Type
  608.  
  609.  
  610. Global Const USB_TRANSFER_HALT = 1     ' USB TRANSFER options
  611.  
  612. Type WD_USB_TRANSFER
  613.     hDevice      As Long       ' handle of USB device to read from or write to
  614.     dwPipe       As Long       ' pipe number on device
  615.     fRead        As Long
  616.     dwOptions    As Long       ' USB_TRANSFER options:
  617.                                '    USB_TRANSFER_HALT halts the pervious no wait transfer
  618.     pBuffer      As Long       ' pointer to buffer to read/write
  619.     dwBytes      As Long
  620.     dwTimeout    As Long       ' timeout for the transfer in milli-seconds. 0==>no timeout.
  621.     dwBytesTransfered As Long  ' returns the number of bytes actually read/written
  622.     SetupPacket(0 To 8 - 1) As Byte     ' setup packet for control pipe transfer
  623.     fOK          As Long       ' transfer succeeded
  624. End Type
  625.  
  626. Type WD_USB_DEVICE_REGISTER
  627.     uniqueId             As Long         ' the device unique ID
  628.     dwConfigurationIndex As Long         ' the index of the configuration to register
  629.     dwInterfaceNum       As Long         ' interface to register
  630.     dwInterfaceAlternate As Long
  631.     hDevice              As Long         ' handle of device
  632.     Device               As WD_USB_DEVICE_INFO      ' description of the device
  633.     dwOptions            As Long         ' should be zero
  634.     cName(0 To 32 - 1)   As Byte         ' name of card
  635.     cDescription(0 To 100 - 1) As Byte   ' description
  636. End Type
  637.  
  638. Type WD_USB_RESET_PIPE
  639.         hDevice As Long
  640.         dwPipe As Long
  641. End Type
  642.  
  643.  
  644. Private IOCTL_WD_USB_RESET_PIPE         As Long
  645. Private IOCTL_WD_USB_RESET_DEVICE       As Long
  646. Private IOCTL_WD_USB_SCAN_DEVICES       As Long
  647. Private IOCTL_WD_USB_SCAN_DEVICES_V432  As Long
  648. Private IOCTL_WD_USB_TRANSFER           As Long
  649. Private IOCTL_WD_USB_DEVICE_REGISTER    As Long
  650. Private IOCTL_WD_USB_DEVICE_UNREGISTER  As Long
  651. Private IOCTL_WD_USB_GET_CONFIGURATION  As Long
  652.     
  653. Dim WinDriverGlobalDW As Long
  654.  
  655. Global Const WD_TYPE As Long = 38200
  656. Global Const FILE_ANY_ACCESS As Long = 0
  657. Global Const METHOD_NEITHER As Long = 3
  658.  
  659. '    This is an implementation of a WinIOCTL macro (CTL_CODE)
  660. Function Get_Ctl_Code(Nr As Integer) As Long
  661. Dim lTMP As Long
  662. Const lMaxLong As Long = 2147483647
  663.    lTMP = (WD_TYPE * 2 ^ 15) Or (FILE_ANY_ACCESS * 2 ^ 13) + ((Nr * 4) Or (METHOD_NEITHER)) \ 2
  664.    Get_Ctl_Code = 0 - (lMaxLong - lTMP) * 2 - 1
  665. End Function ' Get_Ctl_Code
  666.  
  667. Function WD_Open() As Long
  668.   Static WD_Initialized As Integer
  669.   
  670.   If (WD_Initialized = 0) Then
  671.     WD_Initialize
  672.     WD_Initialized = 1
  673.   End If
  674.   
  675.   WD_Open = CreateFile("\\.\WINDRVR", GENERIC_READ, _
  676.      FILE_SHARE_READ Or FILE_SHARE_WRITE, 0, _
  677.      OPEN_EXISTING, FILE_FLAG_OVERLAPPED, 0)
  678. End Function
  679.  
  680. Sub WD_Close(hWD As Long)
  681.   CloseHandle hWD
  682. End Sub
  683.  
  684. Sub WD_Debug(hWD As Long, Debug_parm As WD_DEBUG)
  685.    DeviceIoControl hWD, IOCTL_WD_DEBUG, Debug_parm, _
  686.                   LenB(Debug_parm), 0, 0, WinDriverGlobalDW, 0
  687. End Sub ' WD_Debug
  688.  
  689. Sub WD_DebugDump(hWD As Long, DebugDump As WD_DEBUG_DUMP)
  690.   DeviceIoControl hWD, IOCTL_WD_DEBUG_DUMP, DebugDump, _
  691.                   LenB(DebugDump), 0, 0, WinDriverGlobalDW, 0
  692. End Sub ' WD_DebugDump
  693.  
  694. Sub WD_Transfer(hWD As Long, Transfer As WD_TRANSFER)
  695.   DeviceIoControl hWD, IOCTL_WD_TRANSFER, Transfer, _
  696.                   LenB(Transfer), 0, 0, WinDriverGlobalDW, 0
  697. End Sub ' WD_Transfer
  698.  
  699. Sub WD_MultiTransfer(hWD As Long, TransferArray As WD_TRANSFER, dwNumTransfers As Integer)
  700.   DeviceIoControl hWD, IOCTL_WD_MULTI_TRANSFER, TransferArray, _
  701.                   LenB(TransferArray) * dwNumTransfers, 0, _
  702.                   0, WinDriverGlobalDW, 0
  703. End Sub ' WD_MultiTransfer
  704.  
  705. Sub WD_DMALock(hWD As Long, Dma As WD_DMA)
  706.   DeviceIoControl hWD, IOCTL_WD_DMA_LOCK, Dma, LenB(Dma), 0, 0, _
  707.                   WinDriverGlobalDW, 0
  708. End Sub ' WD_DMALock
  709.  
  710. Sub WD_DMAUnlock(hWD As Long, Dma As WD_DMA)
  711.   DeviceIoControl hWD, IOCTL_WD_DMA_UNLOCK, Dma, LenB(Dma), 0, _
  712.                   0, WinDriverGlobalDW, 0
  713. End Sub ' WD_DMAUnlock
  714.  
  715. Sub WD_IntEnable(hWD As Long, TheInterrupt As WD_INTERRUPT)
  716.   DeviceIoControl hWD, IOCTL_WD_INT_ENABLE, TheInterrupt, _
  717.                   LenB(TheInterrupt), 0, 0, WinDriverGlobalDW, 0
  718. End Sub ' WD_IntEnable
  719.  
  720. Sub WD_IntDisable(hWD As Long, TheInterrupt As WD_INTERRUPT)
  721.   DeviceIoControl hWD, IOCTL_WD_INT_DISABLE, TheInterrupt, _
  722.                   LenB(TheInterrupt), 0, 0, WinDriverGlobalDW, 0
  723. End Sub ' WD_IntDisable
  724.  
  725. Sub WD_IntCount(hWD As Long, TheInterrupt As WD_INTERRUPT)
  726.   DeviceIoControl hWD, IOCTL_WD_INT_COUNT, TheInterrupt, _
  727.                   LenB(TheInterrupt), 0, 0, WinDriverGlobalDW, 0
  728. End Sub ' WD_IntCount
  729.  
  730. Sub WD_IntWait(hWD As Long, TheInterrupt As WD_INTERRUPT)
  731. Dim h As Long
  732.   h = WD_Open()
  733.   DeviceIoControl h, IOCTL_WD_INT_WAIT, TheInterrupt, _
  734.                   LenB(TheInterrupt), 0, 0, WinDriverGlobalDW, 0
  735.   WD_Close h
  736. End Sub ' WD_IntWait
  737.  
  738. Sub WD_IsapnpScanCards(hWD As Long, IsapnpScanCards As WD_ISAPNP_SCAN_CARDS)
  739.   DeviceIoControl hWD, IOCTL_WD_ISAPNP_SCAN_CARDS, IsapnpScanCards, _
  740.                   LenB(IsapnpScanCards), 0, 0, WinDriverGlobalDW, 0
  741. End Sub ' WD_IsapnpScanCards
  742.  
  743. Sub WD_IsapnpGetCardInfo(hWD As Long, IsapnpGetCardInfo As WD_ISAPNP_CARD_INFO)
  744.   DeviceIoControl hWD, IOCTL_WD_ISAPNP_GET_CARD_INFO, IsapnpGetCardInfo, _
  745.                   LenB(IsapnpGetCardInfo), 0, 0, WinDriverGlobalDW, 0
  746. End Sub ' WD_IsapnpGetCardInfo
  747.  
  748. Sub WD_IsapnpConfigDump(hWD As Long, IsapnpConfigDump As WD_ISAPNP_CONFIG_DUMP)
  749.   DeviceIoControl hWD, IOCTL_WD_ISAPNP_CONFIG_DUMP, IsapnpConfigDump, _
  750.                   LenB(IsapnpConfigDump), 0, 0, WinDriverGlobalDW, 0
  751. End Sub ' WD_IsapnpConfigDump
  752.  
  753. Sub WD_PcmciaScanCards(hWD As Long, PcmciaScanCards As WD_PCMCIA_SCAN_CARDS)
  754.   DeviceIoControl hWD, IOCTL_WD_PCMCIA_SCAN_CARDS, PcmciaScanCards, _
  755.                                   LenB(PcmciaScanCards), 0, 0, WinDriverGlobalDW, 0
  756. End Sub ' WD_PcmciaScanCards
  757.  
  758. Sub WD_PcmciaGetCardInfo(hWD As Long, PcmciaCardInfo As WD_PCMCIA_CARD_INFO)
  759.   DeviceIoControl hWD, IOCTL_WD_PCMCIA_GET_CARD_INFO, PcmciaCardInfo, _
  760.                                   LenB(PcmciaCardInfo), 0, 0, WinDriverGlobalDW, 0
  761. End Sub ' WD_PcmciaGetCardInfo
  762.  
  763. Sub WD_PcmciaConfigDump(hWD As Long, PcmciaConfigDump As WD_PCMCIA_CONFIG_DUMP)
  764.   DeviceIoControl hWD, IOCTL_WD_PCMCIA_CONFIG_DUMP, PcmciaConfigDump, _
  765.                           LenB(PcmciaConfigDump), 0, 0, WinDriverGlobalDW, 0
  766. End Sub ' WD_PcmciaConfigDump
  767.  
  768. Sub WD_Sleep(hWD As Long, Sleep As WD_SLEEP)
  769.   DeviceIoControl hWD, IOCTL_WD_SLEEP, Sleep, _
  770.                   LenB(Sleep), 0, 0, WinDriverGlobalDW, 0
  771. End Sub ' WD_Sleep
  772.  
  773. Sub WD_CardRegister(hWD As Long, Card As WD_CARD_REGISTER)
  774.    DeviceIoControl hWD, IOCTL_WD_CARD_REGISTER, Card, _
  775.                   LenB(Card), 0, 0, WinDriverGlobalDW, 0
  776. End Sub ' WD_CardRegister
  777.  
  778. Sub WD_CardUnregister(hWD As Long, Card As WD_CARD_REGISTER)
  779.   DeviceIoControl hWD, IOCTL_WD_CARD_UNREGISTER, Card, _
  780.                   LenB(Card), 0, 0, WinDriverGlobalDW, 0
  781. End Sub ' WD_CardUnregister
  782.  
  783. Sub WD_PciScanCards(hWD As Long, PciScan As WD_PCI_SCAN_CARDS)
  784.    DeviceIoControl hWD, IOCTL_WD_PCI_SCAN_CARDS, PciScan, _
  785.                   LenB(PciScan), 0, 0, WinDriverGlobalDW, 0
  786. End Sub ' WD_PciScanCards
  787.  
  788. Sub WD_PciGetCardInfo(hWD As Long, PciCard As WD_PCI_CARD_INFO)
  789.  DeviceIoControl hWD, IOCTL_WD_PCI_GET_CARD_INFO, PciCard, _
  790.                   LenB(PciCard), 0, 0, WinDriverGlobalDW, 0
  791. End Sub ' WD_PciGetCardInfo
  792.  
  793. Sub WD_Version(hWD As Long, VerInfo As WD_VERSION)
  794.   DeviceIoControl hWD, IOCTL_WD_VERSION, VerInfo, _
  795.                   LenB(VerInfo), 0, 0, WinDriverGlobalDW, 0
  796. End Sub ' WD_Version
  797.  
  798. Sub WD_License(hWD As Long, License As WD_LICENSE)
  799.   DeviceIoControl hWD, IOCTL_WD_LICENSE, License, _
  800.                   LenB(License), 0, 0, WinDriverGlobalDW, 0
  801. End Sub ' WD_License
  802.  
  803. Sub WD_KernelPlugInOpen(hWD As Long, KernelPlugInOpen As WD_KERNEL_PLUGIN)
  804.   DeviceIoControl hWD, IOCTL_WD_KERNEL_PLUGIN_OPEN, KernelPlugInOpen, _
  805.                   LenB(KernelPlugInOpen), 0, 0, WinDriverGlobalDW, 0
  806. End Sub ' WD_KernelPlugInOpen
  807.  
  808. Sub WD_KernelPlugInClose(hWD As Long, KernelPlugInClose As WD_KERNEL_PLUGIN)
  809.   DeviceIoControl hWD, IOCTL_WD_KERNEL_PLUGIN_CLOSE, KernelPlugInClose, _
  810.                   LenB(KernelPlugInClose), 0, 0, WinDriverGlobalDW, 0
  811. End Sub ' WD_KernelPlugInClose
  812.  
  813. Sub WD_KernelPlugInCall(hWD As Long, KernelPlugInCall As WD_KERNEL_PLUGIN_CALL)
  814.   DeviceIoControl hWD, IOCTL_WD_KERNEL_PLUGIN_CALL, KernelPlugInCall, _
  815.                   LenB(KernelPlugInCall), 0, 0, WinDriverGlobalDW, 0
  816. End Sub ' WD_KernelPlugInCall
  817.  
  818. Sub WD_PciConfigDump(hWD As Long, PciConfigDump As WD_PCI_CONFIG_DUMP)
  819.   DeviceIoControl hWD, IOCTL_WD_PCI_CONFIG_DUMP, PciConfigDump, _
  820.                   LenB(PciConfigDump), 0, 0, WinDriverGlobalDW, 0
  821. End Sub ' WD_PciConfigDump
  822.  
  823. Sub WD_UsbScanDevice(hWD As Long, scan As WD_USB_SCAN_DEVICES)
  824.   DeviceIoControl hWD, IOCTL_WD_USB_SCAN_DEVICES, scan, _
  825.                   LenB(scan), 0, 0, WinDriverGlobalDW, 0
  826. End Sub ' WD_UsbScanDevice
  827.  
  828. Sub WD_UsbGetConfiguration(hWD As Long, Config As WD_USB_CONFIGURATION)
  829.   DeviceIoControl hWD, IOCTL_WD_USB_GET_CONFIGURATION, Config, _
  830.                   LenB(Config), 0, 0, WinDriverGlobalDW, 0
  831. End Sub ' WD_UsbGetConfiguration
  832.  
  833. Sub WD_UsbDeviceRegister(hWD As Long, dev As WD_USB_DEVICE_REGISTER)
  834.   DeviceIoControl hWD, IOCTL_WD_USB_DEVICE_REGISTER, dev, _
  835.                   LenB(dev), 0, 0, WinDriverGlobalDW, 0
  836. End Sub ' WD_UsbDeviceRegister
  837.  
  838. Sub WD_UsbTransfer(hWD As Long, trans As WD_USB_TRANSFER)
  839. Dim h As Long
  840.   h = WD_Open()
  841.   DeviceIoControl h, IOCTL_WD_USB_TRANSFER, trans, _
  842.                   LenB(trans), 0, 0, WinDriverGlobalDW, 0
  843.   WD_Close h
  844. End Sub ' WD_UsbTransfer
  845.  
  846. Sub WD_UsbDeviceUnregister(hWD As Long, dev As WD_USB_DEVICE_REGISTER)
  847.   DeviceIoControl hWD, IOCTL_WD_USB_DEVICE_UNREGISTER, dev, _
  848.                   LenB(dev), 0, 0, WinDriverGlobalDW, 0
  849. End Sub ' WD_UsbDeviceUnregister
  850.  
  851. Sub WD_UsbResetPipe(hWD As Long, ResetPipe As WD_USB_RESET_PIPE)
  852.   DeviceIoControl hWD, IOCTL_WD_USB_RESET_PIPE, ResetPipe, _
  853.                   LenB(ResetPipe), 0, 0, WinDriverGlobalDW, 0
  854. End Sub ' WD_UsbResetPipe
  855.  
  856. Sub WD_UsbResetDevice(hWD As Long, hDev As Long)
  857.   DeviceIoControl hWD, IOCTL_WD_USB_RESET_DEVICE, hDev, _
  858.                   LenB(hDev), 0, 0, WinDriverGlobalDW, 0
  859. End Sub ' WD_UsbResetDevice
  860.  
  861. Sub WD_Initialize()
  862.  
  863.     IOCTL_WD_DMA_LOCK                 = Get_Ctl_Code(&H901)
  864.     IOCTL_WD_DMA_UNLOCK               = Get_Ctl_Code(&H902)
  865.     IOCTL_WD_TRANSFER                 = Get_Ctl_Code(&H903)
  866.     IOCTL_WD_MULTI_TRANSFER           = Get_Ctl_Code(&H904)
  867.     IOCTL_WD_PCI_SCAN_CARDS           = Get_Ctl_Code(&H90E)
  868.     IOCTL_WD_PCI_GET_CARD_INFO        = Get_Ctl_Code(&H90F)
  869.     IOCTL_WD_VERSION                  = Get_Ctl_Code(&H910)
  870.     IOCTL_WD_PCI_CONFIG_DUMP          = Get_Ctl_Code(&H91A)
  871.     IOCTL_WD_KERNEL_PLUGIN_OPEN       = Get_Ctl_Code(&H91B)
  872.     IOCTL_WD_KERNEL_PLUGIN_CLOSE      = Get_Ctl_Code(&H91C)
  873.     IOCTL_WD_KERNEL_PLUGIN_CALL       = Get_Ctl_Code(&H91D)
  874.     IOCTL_WD_INT_ENABLE               = Get_Ctl_Code(&H91E)
  875.     IOCTL_WD_INT_DISABLE              = Get_Ctl_Code(&H91F)
  876.     IOCTL_WD_INT_COUNT                = Get_Ctl_Code(&H920)
  877.     IOCTL_WD_ISAPNP_SCAN_CARDS        = Get_Ctl_Code(&H924)
  878.     IOCTL_WD_ISAPNP_CONFIG_DUMP       = Get_Ctl_Code(&H926)
  879.     IOCTL_WD_SLEEP                    = Get_Ctl_Code(&H927)
  880.     IOCTL_WD_DEBUG                    = Get_Ctl_Code(&H928)
  881.     IOCTL_WD_DEBUG_DUMP               = Get_Ctl_Code(&H929)
  882.     IOCTL_WD_CARD_UNREGISTER          = Get_Ctl_Code(&H92B)
  883.     IOCTL_WD_ISAPNP_GET_CARD_INFO     = Get_Ctl_Code(&H92D)
  884.     IOCTL_WD_PCMCIA_SCAN_CARDS        = Get_Ctl_Code(&H92F)
  885.     IOCTL_WD_PCMCIA_GET_CARD_INFO     = Get_Ctl_Code(&H930)
  886.     IOCTL_WD_PCMCIA_CONFIG_DUMP       = Get_Ctl_Code(&H931)
  887.     IOCTL_WD_CARD_REGISTER            = Get_Ctl_Code(&H956)
  888.     IOCTL_WD_INT_WAIT                 = Get_Ctl_Code(&H94B)
  889.     IOCTL_WD_LICENSE                  = Get_Ctl_Code(&H952)
  890.     IOCTL_WD_USB_RESET_PIPE           = Get_Ctl_Code(&H93C)
  891.     IOCTL_WD_USB_RESET_DEVICE         = Get_Ctl_Code(&H93F)
  892.     IOCTL_WD_USB_SCAN_DEVICES_V432    = Get_Ctl_Code(&H940)
  893.     IOCTL_WD_USB_SCAN_DEVICES         = Get_Ctl_Code(&H95A)
  894.     IOCTL_WD_USB_TRANSFER             = Get_Ctl_Code(&H942)
  895.     IOCTL_WD_USB_DEVICE_REGISTER      = Get_Ctl_Code(&H949)
  896.     IOCTL_WD_USB_DEVICE_UNREGISTER    = Get_Ctl_Code(&H959)
  897.     IOCTL_WD_USB_GET_CONFIGURATION    = Get_Ctl_Code(&H946)
  898.  
  899.  
  900. End Sub
  901.